package br.com.rhweb.modelos;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

@Entity
@Table(name = "tbl_pessoa")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Pessoa implements Serializable{

	@Id
	@Column(name = "cpf", length = 11, nullable = true)
	private String cpf;

	@Column(name = "numero_identidade", nullable = true)
	private String identidade;

	@Column(name = "orgao_emissor_identidade", nullable = true)
	private String orgaoEmissor;

	@Column(name = "uf_emissao_identidade", nullable = true)
	private String ufEmissaoIdentidade;

	@Column(name = "nome")
	private String nome;

	@Temporal(TemporalType.DATE)
	@Column(name = "data_nascimento", nullable = true)
	private Date dataNasc;

	@Column(name = "nome_pai", nullable = true)
	private String nomePai;

	@Column(name = "nome_mae", nullable = true)
	private String nomeMae;

	@Column(name = "sexo", nullable = true)
	private String sexo;

	@Column(name = "numero_filhos", nullable = true)
	private String qtdFilhos;

	@Column(name = "numero_ctps", nullable = true)
	private String numeroCTPS;

	@Column(name = "serie_ctps", nullable = true)
	private String serieCTPS;

	@Column(name = "uf_ctps", nullable = true)
	private String ufCTPS;

	@Column(name = "natural", nullable = true)
	private String naturalidade;

	@Column(name = "uf_naturalidade", nullable = true)
	private String ufNaturalidade;

	@Column(name = "nacionalidade", nullable = true)
	private String nacionalidade;

	@Column(name = "escolaridade", nullable = true)
	private String escolaridade;

	@Column(name = "numero_titulo_eleitor", nullable = true)
	private String numeroTitEleitoral;

	@Column(name = "zona_titulo_eleitor", nullable = true)
	private String zonaTitEleitoral;

	@Column(name = "secao_titulo_eleitor", nullable = true)
	private String secaoTitEleitoral;

	@Column(name = "numero_habilitacao", nullable = true)
	private String numeroHabilitacao;

	@Column(name = "categoria_habilitacao", nullable = true)
	private String categoriaHabilitacao;

	@Column(name = "pis_pasep", nullable = true)
	private String pis_pasep;

	@Column(name = "fator_sanguineo", nullable = true)
	private String fatorSanguineo;

	@Column(name = "tipo_sanguineo", nullable = true)
	private String tipoSanguineo;

	@ManyToOne(optional = true, fetch = FetchType.LAZY)
	@JoinColumn(name = "id_estado_civil")
	private Estado_Civil estadoCivil;

	@OneToOne
	@JoinColumn(name = "id_raca", nullable = true)
	private Raca raca;

	@OneToOne
	@JoinColumn(name = "cep_endereco", nullable = true)
	private Endereco endereco;

	@Column(name = "numero_endereco", nullable = true)
	private String numeroEndereco;

	@Column(name = "complemento_endereco", nullable = true)
	private String complementoEndereco;

	@Column(name = "telefone_celular", nullable = true)
	private String telefoneCelular;

	@Column(name = "telefone_fixo", nullable = true)
	private String telefoneFixo;

	@Column(name = "email", nullable = true)
	private String email;

	@Column(name = "dados_confirmado", nullable=false, insertable=true, updatable=true, columnDefinition="boolean default false")
	private boolean dadosConfirmado;
	
	@Column(name="foto")
	private byte[] foto;

	/*@OneToMany
	private List<Funcionario> funcionarios;*/

	
	@OneToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="usuario_confirnmacao",  nullable=true)
	private Usuario usuario;
	
	@Temporal(TemporalType.DATE)
	@Column(name="data_confirmacao", nullable=true)
	private Date dataConfirmacao;
	
	public String getIdentidade() {
		return identidade;
	}

	public void setIdentidade(String identidade) {
		this.identidade = identidade;
	}

	public String getOrgaoEmissor() {
		return orgaoEmissor;
	}

	public void setOrgaoEmissor(String orgaoEmissor) {
		this.orgaoEmissor = orgaoEmissor;
	}

	public String getUfEmissaoIdentidade() {
		return ufEmissaoIdentidade;
	}

	public void setUfEmissaoIdentidade(String ufEmissaoIdentidade) {
		this.ufEmissaoIdentidade = ufEmissaoIdentidade;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public Date getDataNasc() {
		return dataNasc;
	}

	public void setDataNasc(Date dataNasc) {
		this.dataNasc = dataNasc;
	}

	public String getNomePai() {
		return nomePai;
	}

	public void setNomePai(String nomePai) {
		this.nomePai = nomePai;
	}

	public String getNomeMae() {
		return nomeMae;
	}

	public void setNomeMae(String nomeMae) {
		this.nomeMae = nomeMae;
	}

	public String getSexo() {
		return sexo;
	}

	public void setSexo(String sexo) {
		this.sexo = sexo;
	}

	public String getQtdFilhos() {
		return qtdFilhos;
	}

	public void setQtdFilhos(String qtdFilhos) {
		this.qtdFilhos = qtdFilhos;
	}

	public String getNumeroCTPS() {
		return numeroCTPS;
	}

	public void setNumeroCTPS(String numeroCTPS) {
		this.numeroCTPS = numeroCTPS;
	}

	public String getSerieCTPS() {
		return serieCTPS;
	}

	public void setSerieCTPS(String serieCTPS) {
		this.serieCTPS = serieCTPS;
	}

	public String getUfCTPS() {
		return ufCTPS;
	}

	public void setUfCTPS(String ufCTPS) {
		this.ufCTPS = ufCTPS;
	}

	public String getNaturalidade() {
		return naturalidade;
	}

	public void setNaturalidade(String naturalidade) {
		this.naturalidade = naturalidade;
	}

	public String getUfNaturalidade() {
		return ufNaturalidade;
	}

	public void setUfNaturalidade(String ufNaturalidade) {
		this.ufNaturalidade = ufNaturalidade;
	}

	public String getNacionalidade() {
		return nacionalidade;
	}

	public void setNacionalidade(String nacionalidade) {
		this.nacionalidade = nacionalidade;
	}

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public String getNumeroTitEleitoral() {
		return numeroTitEleitoral;
	}

	public void setNumeroTitEleitoral(String numeroTitEleitoral) {
		this.numeroTitEleitoral = numeroTitEleitoral;
	}

	public String getZonaTitEleitoral() {
		return zonaTitEleitoral;
	}

	public void setZonaTitEleitoral(String zonaTitEleitoral) {
		this.zonaTitEleitoral = zonaTitEleitoral;
	}

	public String getSecaoTitEleitoral() {
		return secaoTitEleitoral;
	}

	public void setSecaoTitEleitoral(String secaoTitEleitoral) {
		this.secaoTitEleitoral = secaoTitEleitoral;
	}

	public String getNumeroHabilitacao() {
		return numeroHabilitacao;
	}

	public void setNumeroHabilitacao(String numeroHabilitacao) {
		this.numeroHabilitacao = numeroHabilitacao;
	}

	public String getCategoriaHabilitacao() {
		return categoriaHabilitacao;
	}

	public void setCategoriaHabilitacao(String categoriaHabilitacao) {
		this.categoriaHabilitacao = categoriaHabilitacao;
	}

	public String getFatorSanguineo() {
		return fatorSanguineo;
	}

	public void setFatorSanguineo(String fatorSanguineo) {
		this.fatorSanguineo = fatorSanguineo;
	}

	public String getTipoSanguineo() {
		return tipoSanguineo;
	}

	public void setTipoSanguineo(String tipoSanguineo) {
		this.tipoSanguineo = tipoSanguineo;
	}

	public Estado_Civil getEstado_Civil() {
		return estadoCivil;
	}

	public void setEstado_Civil(Estado_Civil estadoCivil) {
		this.estadoCivil = estadoCivil;
	}

	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public Raca getRaca() {
		return raca;
	}

	public void setRaca(Raca raca) {
		this.raca = raca;
	}

	public Estado_Civil getEstadoCivil() {
		return estadoCivil;
	}

	public void setEstadoCivil(Estado_Civil estadoCivil) {
		this.estadoCivil = estadoCivil;
	}

	public String getNumeroEndereco() {
		return numeroEndereco;
	}

	public void setNumeroEndereco(String numeroEndereco) {
		this.numeroEndereco = numeroEndereco;
	}

	public String getComplementoEndereco() {
		return complementoEndereco;
	}

	public void setComplementoEndereco(String complementoEndereco) {
		this.complementoEndereco = complementoEndereco;
	}

	public String getTelefoneCelular() {
		return telefoneCelular;
	}

	public void setTelefoneCelular(String telefoneCelular) {
		this.telefoneCelular = telefoneCelular;
	}

	public String getTelefoneFixo() {
		return telefoneFixo;
	}

	public void setTelefoneFixo(String telefoneFixo) {
		this.telefoneFixo = telefoneFixo;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getEscolaridade() {
		return escolaridade;
	}

	public void setEscolaridade(String escolaridade) {
		this.escolaridade = escolaridade;
	}

	public String getPis_pasep() {
		return pis_pasep;
	}

	public void setPis_pasep(String pis_pasep) {
		this.pis_pasep = pis_pasep;
	}

	public boolean isDadosConfirmado() {
		return dadosConfirmado;
	}

	public void setDadosConfirmado(boolean dadosConfirmado) {
		this.dadosConfirmado = dadosConfirmado;
	}

	public byte[] getFoto() {
		return foto;
	}

	public void setFoto(byte[] foto) {
		this.foto = foto;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public Date getDataConfirmacao() {
		return dataConfirmacao;
	}

	public void setDataConfirmacao(Date dataConfirmacao) {
		this.dataConfirmacao = dataConfirmacao;
	}	
	
}
